// 配置路由的地方
import Vue from 'vue'
import VueRouter from 'vue-router'
import routes from './routes'
// 使用插件
Vue.use(VueRouter)

// 引入store
import store from '@/store/index.js'

// 配置路由
let router = new VueRouter({
  // 配置路由
  // 第一：路由的前面需要有/(不是二级路由)
  // 路径中间单词都是小写的
  // component右侧v别给我加单引号【字符串：组件是对象（VueComponent类的实例）】
  routes,
  // 滚动行为
  scrollBehavior (to, from, savedPosition) {
    // return 期望滚动到哪个的位置
    // 返回的这个y=0代表的是滚动条在屏幕最上方
    return { y: 0 }
  }
})

// 全局守卫：前置守卫（在路由跳转之间进行判断）
router.beforeEach(async (to, from, next)=>{
  // to:可以获取到你要跳到那个路由的信息
  // from:可以获取到你从那个路由来的信息
  // next:放行函数   next()放行   next('路径') 放行到指定的路由    next(false)
  // 用户登录了才会有token，未登录一定不会有token
  let token = store.state.user.token
  // 用户的信息
  let name = store.state.user.userInfo.name
  if(token){
    // 用户已经登录了，还想去login
    if(to.path === '/login' || to.path === '/register'){
      next('/') 
    } else{
      // 登录了去的不是login
      if(name) {
        next()
      } else {
        // 没有用户信息，派发action让仓库存储用户信息在跳转
        try {
          // 获取用户信息成功
          await store.dispatch('getUserInfo')
          // 放行
          next()
        } catch (error) {
          // token失效了获取不到用户信息，重新登录
          // 清楚token
          await store.dispatch('userLogout')
          next('/login')
        }
      }
    }
  } else {
    // 未登录：不能去交易相关、支付相关【pay|paysuccess】、个人中心
    // 未登录去上面的这些路由---登录
    let toPath = to.path
    // console.log(toPath);
    if(toPath.indexOf('/trade') != -1 || toPath.indexOf('/pay') != -1 || toPath.indexOf('/center') != -1){
      next('/login?redirect=' + toPath)
    } else {
        // 去的不是上面这些---放行
        next()
    }
  }
})


export default router
